Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: OTS Statistics #1692

Closed
wants to merge 5 commits into from

Conversation

luanluciano93
Copy link
Contributor

É um sistema bem conhecido de 'estatísticas OTS'. Ele rastreia todas as tarefas do thread do despachante, chamadas de função Lua e consultas SQL.

Ele gera arquivos e dispatcher.log fica assim: lua.log - sql.log - data/logs/stats

[29/01/2023 16:08:37]
Thread: 1 Cpu usage: 0.628848% Idle: 99.6671% Other: -0.295933% Players online: 0
 Time (ms)     Calls     Rel usage %    Real usage % Description
       167       120       88.80196%        0.55843% std::bind(&Game::checkDecay, this)
        20       300       10.83945%        0.06816% std::bind(&Game::checkCreatures, this, (index + 1) % EVENT_CREATURECOUNT)
         0        12        0.30616%        0.00193% std::bind(&Game::updateWorldTime, this)

O intervalo do relatório é configurável em config.lua.

Ele também relata chamadas de função lentas/muito lentas em arquivos dispatcher_slow.log
Ex: a inicialização do servidor leva mais de 50 ms, então é relatado como muito lento: lua_slow.log - sql_slow.log- dispatcher_very_slow.log

[29/01/2023 16:06:07] Execution time: 466 ms - std::bind(mainLoader, argc, argv, &serviceManager) - main

Lua startup.lua executa mais de 10 ms, é relatada como lenta:

[29/01/2023 16:06:07] Execution time: 35 ms - data/globalevents/scripts/startup.lua:onStartup - 

SQL demorou mais de 10 ms, é relatado como lento:

[29/01/2023 16:06:07] Execution time: 24 ms - TRUNCATE TABLE `towns` - TRUNCATE TABLE `towns`

O tempo lento/muito lento é configurável em config.lua

Existem também special.log, special_slow.log e special_very_slow.log, que relatam suas estatísticas personalizadas.
Ex. para relatar o tempo de deterioração dos itens, em game.cpp:

void Game::internalDecayItem(Item* item) 
{

Adicionar:

AutoStat stat("internalDecayItem", std::to_string(item->getID()));

A string internalDecayItem será usada para o relatório de uso total da CPU. O segundo parâmetro (ID do item) será relatado nos slowregistros very_slow. Nesse caso, diria qual ID de item decaiu em 10 ms (tempo de decaimento de item único, nem todos os itens com esse ID de item).

A maioria dos OTS passam o nome do jogador como segundo parâmetro. Isso permitiu que eles rastreassem qual jogador gerou ações 'lentas' - OTS atrasado.

Credits: kondra e @gesior

@luanluciano93 luanluciano93 marked this pull request as draft October 11, 2023 02:47
@luan
Copy link
Contributor

luan commented Oct 13, 2023

I don't think we should dive deeper into having more and more custom bespoke systems in the repo when there are solid open source implementations of this.

I would personally lean towards implementing something like this using Open Telemetry https://opentelemetry.io/

@luanluciano93 luanluciano93 deleted the OTSStatistics branch February 23, 2024 06:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants